/**
 * @file
 * @author Filipe Mutz
 *
 * @section DESCRIPTION
 *
 */
#include "vg_ram_neuron_layer.h"

namespace brain
{
	namespace neuron_layer
	{
		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		VGRAMNeuronLayer<OutputClass>::VGRAMNeuronLayer(int width, int height)
		{
			int i;

			_height = height;
			_width = width;

			_patterns = (int ***) calloc (height, sizeof(int**));

			for(i = 0; i < height; i++)
				_patterns[i] = (int **) calloc (width, sizeof(int*));
		}


		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		VGRAMNeuronLayer<OutputClass>::~VGRAMNeuronLayer()
		{
			int i, j;

			for(i = 0; i < _height; i++)
			{
				for(j = 0; j < _width; j++)
					free(_patterns[i][j]);

				free(_patterns[i]);
			}

			free(_patterns);
		}


		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		void VGRAMNeuronLayer<OutputClass>::train(int ***pattern, OutputClass **class_id)
		{
		}


		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		void VGRAMNeuronLayer<OutputClass>::train(int ****pattern_array, OutputClass ***class_array, int num_samples)
		{
		}


		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		void VGRAMNeuronLayer<OutputClass>::train(int neuron_x, int neuron_y, int *pattern, OutputClass class_id)
		{
		}


		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		void train(int neuron_x, int neuron_y, int **pattern_array, OutputClass *class_array, int num_samples)
		{
		}


		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		OutputClass VGRAMNeuronLayer<OutputClass>::test(int ***pattern)
		{
		}


		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		OutputClass* VGRAMNeuronLayer<OutputClass>::test(int ****pattern_array, int num_samples)
		{
		}


		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		OutputClass VGRAMNeuronLayer<OutputClass>::test(int neuron_x, int neuron_y, int *pattern)
		{
		}


		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		OutputClass* VGRAMNeuronLayer<OutputClass>::test(int neuron_x, int neuron_y, int **pattern, int num_samples)
		{
		}


		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		void VGRAMNeuronLayer<OutputClass>::save_train_data(char *output_file)
		{
		}


		/**
		 *
		 * @param
		 * @param
		 * @return
		 */
		template<class OutputClass>
		void VGRAMNeuronLayer<OutputClass>::load_train_data(char *input_file)
		{
		}
	}
}

